//package com.core.common.manger.influx;
//
//import com.core.common.config.InfluxValues;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//@Service
//@Slf4j
//public class InfluxDBService {
//
//    @Autowired
//    private InfluxDBClient influxDBClient;
//
//    @Autowired
//    private InfluxValues influxValues;
//
//    @Autowired
//    private WriteApi writeApi;
//
//    /**
//     * 获取表90天数据
//     *
//     * @param measurement 表
//     * @param bucket      桶
//     * @return
//     */
//    public List<FluxTable> getList(String bucket, String measurement) {
//        StringBuffer buffer = new StringBuffer();
//        appendBucketFlux(buffer, bucket);
//        appendTimeRangeLastFlux(buffer, 2160, "h");
//        appendTableFlux(buffer, measurement);
//        return influxDBClient.getQueryApi().query(buffer.toString(), influxValues.getOrg());
//    }
//
//    /**
//     * 获取指定时间段内的数据
//     *
//     * @param hour 小时
//     * @return
//     */
//    public List<FluxTable> getList(String bucket, int hour) {
//        StringBuffer buffer = new StringBuffer();
//        appendBucketFlux(buffer, bucket);
//        appendTimeRangeLastFlux(buffer, hour, "h");
//
//        return influxDBClient.getQueryApi().query(buffer.toString(), influxValues.getOrg());
//    }
//
//    /**
//     * 获取指定时间段内表的数据
//     *
//     * @param hour 小时
//     * @return
//     */
//    public List<FluxTable> getList(String bucket, String measurement, int hour) {
//        StringBuffer buffer = new StringBuffer();
//        appendBucketFlux(buffer, bucket);
//        appendTimeRangeLastFlux(buffer, hour, "h");
//        if (measurement != null) {
//            appendTableFlux(buffer, measurement);
//        }
//        return influxDBClient.getQueryApi().query(buffer.toString(), influxValues.getOrg());
//    }
//
//    /**
//     * 获取表数据(时间筛选)
//     *
//     * @param measurement 表
//     * @return
//     */
//    public List<FluxTable> getList(String bucket, String measurement, String start, String stop) {
//        StringBuffer buffer = new StringBuffer();
//        appendBucketFlux(buffer, bucket);
//        appendTimeRangeFlux(buffer, start, stop);
//        appendTableFlux(buffer, measurement);
//        return influxDBClient.getQueryApi().query(buffer.toString(), influxValues.getOrg());
//    }
//
//    /**
//     * 获取表数据(时间筛选)
//     *
//     * @param bucket      桶
//     * @param measurement 表
//     * @param start       开始时间
//     * @param stop        结束时间
//     * @param limit       限制几个
//     * @return
//     */
////    public List<FluxTable> getList(String bucket, String measurement, String start, String stop) {
////        StringBuffer buffer = new StringBuffer();
////        appendBucketFlux(buffer, bucket);
////        appendTimeRangeFlux(buffer, start, stop);
////        appendTableFlux(buffer, measurement);
////        return influxDBClient.getQueryApi().query(buffer.toString(), influxValues.getOrg());
////    }
//
//    /**
//     * 写入数据
//     *
//     * @param measurement 表
//     * @param map         map键值对
//     */
//    public void writeData(String measurement, Map<String, Object> map) {
//        Point point = Point
//                .measurement(measurement)
//                .addTag("diff", measurement + DateUtil.formatDate(new Date(), DateUtil.ssFormat))
//                .addFields(map)
//                .time(Instant.now(), WritePrecision.NS);
//
//        writeApi.writePoint(influxValues.getBucket(), influxValues.getOrg(), point);
//    }
//
//    /**
//     * 写入数据
//     * @param bucket 桶
//     * @param measurement 表
//     * @param map 参数
//     */
//    public void writeData(String bucket,String measurement, Map<String, Object> map) {
//        Point point = Point
//                .measurement(measurement)
//                .addTag("diff", measurement + DateUtil.formatDate(new Date(), DateUtil.ssFormat))
//                .addFields(map)
//                .time(Instant.now(), WritePrecision.NS);
//
//        writeApi.writePoint(bucket, influxValues.getOrg(), point);
//    }
//
//    /**
//     * 数据源(桶)表达式
//     *
//     * @param buffer     buffer
//     * @param bucketName 名称
//     */
//    public static void appendBucketFlux(StringBuffer buffer, String bucketName) {
//        buffer.append("from(bucket: \"").append(bucketName).append("\") ");
//    }
//
//    /**
//     * 表名表达式
//     *
//     * @param buffer    buffer
//     * @param tableName 名称
//     */
//    public static void appendTableFlux(StringBuffer buffer, String tableName) {
//        buffer.append("|> filter(fn: (r) => r._measurement == \"").append(tableName).append("\") ");
//    }
//
//    /**
//     * 表名表达式
//     *
//     * @param buffer buffer
//     * @param tag    名称
//     */
//    public static void appendTagFlux(StringBuffer buffer, String tag) {
//        buffer.append("|> filter(fn: (r) => r.tag == \"").append(tag).append("\") ");
//    }
//
//    /**
//     * field表达式
//     *
//     * @param buffer buffer
//     * @param field  名称
//     */
//    public static void appendTagField(StringBuffer buffer, String field) {
//        buffer.append("|> filter(fn: (r) => r._field == \"").append(field).append("\") ");
//    }
//
//
//    /**
//     * 时间范围表达式  UTC时间
//     *
//     * @param buffer buffer
//     * @param start  开始时间
//     * @param stop   结束时间
//     */
//    public static void appendTimeRangeFlux(StringBuffer buffer, String start, String stop) {
//        if (StringUtils.isEmpty(start)) {
//            start = "2000-01-01T00:00:00.000Z";
//        }
//        if (StringUtils.isEmpty(stop)) {
//            buffer.append("|> range(start:").append(start).append(") ");
//        } else {
//            buffer.append("|> range(start:").append(start).append(", stop:").append(stop).append(") ");
//        }
//    }
//
//    /**
//     * 最近多少时间
//     *
//     * @param buffer 参数
//     * @param time   时间
//     * @param unit   时间单位
//     */
//    public static void appendTimeRangeLastFlux(StringBuffer buffer, int time, String unit) {
//        buffer.append("|> range(start: -").append(time).append(unit).append(" )");
//    }
//
//}
//
